let promise = new Promise((resolve, reject) => {
    resolve("First resoluve")
})

// 通过 return 传递结果
// promise.then((res) => {
//         return res // 普通值
//     })
//     .then((res) => {
//         console.log(res) // First resolve 
//     });

// 通过新的 promise resolve 结果
// promise.then((res) => {
//         return res
//     })
//     .then((res) => {
//         return new Promise((resolve, reject) => {
//             setTimeout(() => {
//                 resolve(res)
//             }, 2000)
//         })
//     }).then((res) => {
//         console.log(res)
//     })

// 通过新的 promise reject 原因
// promise.then((value) => {
//         return value
//     })
//     .then((value) => {
//         return new Promise((resolve, reject) => {
//             setTimeout(() => {
//                 reject(value)
//             }, 2000)
//         })
//     }).then((value) => {
//         console.log("Fulfilled", value)
//     }, (reason) => {
//         console.log("Rejected: " + reason)
//     })

// then 走失败回调后，再走then
// promise.then((value) => {
//     return value
// })
// .then((value) => {
//     return new Promise((resolve, reject) => {
//         setTimeout(() => {
//             reject("Error")
//         }, 2000)
//     })
// }).then((value) => {
//     console.log("Fulfilled", value)
// }, (reason) => {
//     console.log("Rejected: " + reason)
//     // 默认 return underfined
// })
// .then((value) => {
//     console.log(value);
//     console.log("Fuifilled2: " + value)
// }, (reason) => {
//     console.log("Reject2: " + reason)
// })

// then 中使用 throw new Error
// promise.then((value) => {
//     return value
// })
// .then((value) => {
//     return new Promise((resolve, reject) => {
//         setTimeout(() => {
//             reject("Error")
//         }, 2000)
//     })
// }).then((value) => {
//     console.log("Fulfilled", value)
// }, (reason) => {
//     console.log("Rejected: " + reason)
//     // 默认 return underfined
// })
// .then((value) => {
//     throw new Error("Throw Error")
// })
// .then((value) => {
//     console.log(value)
// }, (reason) => {
//     console.log("Exeption: " + reason)
// })

// 用 catch 捕获异常
// promise.then((value) => {
//         return value
//     })
//     .then((value) => {
//         return new Promise((resolve, reject) => {
//             setTimeout(() => {
//                 reject("Error")
//             }, 2000)
//         })
//     }).then((value) => {
//         console.log("Fulfilled", value)
//     }, (reason) => {
//         console.log("Rejected: " + reason)
//         // 默认 return underfined
//     })
//     .then((value) => {
//         throw new Error("Throw Error")
//     })
//     .then((value) => {
//         console.log(value)
//     }, (reason) => {
//         console.log("Then Err: " + reason)
//     }).catch((err) => {
//         console.log("Catch: " + err)
//     })

// catch 在 Promise 的源码层面上就是一个 then ， Catch 也是遵循 then 的 运行原则

// 成功的条件
// 1. then return 普通的 Javascript value
// 2. then return 新的 promise 成功态的结果 value

// 失败的条件
// 1. then return 新的 promise 失败态的原因 reason
// 2. then 抛出了异常 throw new Error

// promise 链式调用
// javascript jQuery（return this）
// then 不具备this
// return new Promise 

// promise.then(() => {
// }) // new Promise
// .then()